package com.dubbo.server.controller;


import com.dubbo.server.service.SmsService;
import com.dubbo.server.vo.ErrorResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

@RestController
@RequestMapping("user")
@Slf4j
public class SmsController {

    @Autowired
    private SmsService smsService;

    /**
     * 发送短信验证码接口
     * <p>
     * phone = {"phone":"17602026868"}
     * phone = 17602026868
     * JSON 字符串的时候  要么使用一个Bean对象去接收  如果没有对应的Bean 建议使用 Map去接收
     *
     * @param param
     * @return 如果是JSON的
     * 我们有对应的Bean可以接收参数 @RequestBody Bean bean
     * 我们没有对应的Bean可以接收参数 @RequestBody Map map
     * <p>
     * 如果不是JSON的
     * 我们有对应的Bean可以接收参数 Bean bean
     * 我们没有对应的Bean可以接收参数 String phone
     * <p>
     * ResponseEntity  --> Response对象
     * <p>
     * 状态码200
     * 数据 String
     */
    @PostMapping("login")
    public ResponseEntity sendCheckCode(@RequestBody Map<String, String> param) {
        // ResponseEntity  可以设置响应状态码 和 响应数据(相当于 response.setStatus(200);response.getWriter().println("xxxx");)
        ErrorResult errorResult = null;
        // 获取用户发来的手机号码
        String phone = param.get("phone");
        try {
            // 调用Service实现短信的发送
            errorResult = smsService.sendCheckCode(phone);
            if (null == errorResult) {
                // 这句话相对于是  response.setStatus(200);
                return ResponseEntity.ok("验证码已发");
            }
        } catch (Exception e) {
            // 这里必须要抓起来 或者写一个 全局异常处理器
            log.error("发送短信验证码失败~ phone = " + phone, e);
            errorResult = ErrorResult.builder().errCode("000001").errMessage("短信验证码发送失败！").build();
        }
        // 发送短信时  用户输入的手机号码不合法 返回 200
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorResult);
    }

}
